{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 采用5折交叉验证，用log似然损失，对Logistic回归模型的正则超参数调优。（50分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.352941</td>\n",
       "      <td>0.670968</td>\n",
       "      <td>0.489796</td>\n",
       "      <td>0.304348</td>\n",
       "      <td>0.133413</td>\n",
       "      <td>0.314928</td>\n",
       "      <td>0.234415</td>\n",
       "      <td>0.483333</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.058824</td>\n",
       "      <td>0.264516</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.239130</td>\n",
       "      <td>0.133413</td>\n",
       "      <td>0.171779</td>\n",
       "      <td>0.116567</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.470588</td>\n",
       "      <td>0.896774</td>\n",
       "      <td>0.408163</td>\n",
       "      <td>0.239130</td>\n",
       "      <td>0.133413</td>\n",
       "      <td>0.104294</td>\n",
       "      <td>0.253629</td>\n",
       "      <td>0.183333</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.058824</td>\n",
       "      <td>0.290323</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.173913</td>\n",
       "      <td>0.096154</td>\n",
       "      <td>0.202454</td>\n",
       "      <td>0.038002</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.163265</td>\n",
       "      <td>0.304348</td>\n",
       "      <td>0.185096</td>\n",
       "      <td>0.509202</td>\n",
       "      <td>0.943638</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.352941                      0.670968        0.489796   \n",
       "1   0.058824                      0.264516        0.428571   \n",
       "2   0.470588                      0.896774        0.408163   \n",
       "3   0.058824                      0.290323        0.428571   \n",
       "4   0.000000                      0.600000        0.163265   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.304348       0.133413  0.314928   \n",
       "1                     0.239130       0.133413  0.171779   \n",
       "2                     0.239130       0.133413  0.104294   \n",
       "3                     0.173913       0.096154  0.202454   \n",
       "4                     0.304348       0.185096  0.509202   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  target  \n",
       "0                    0.234415  0.483333       1  \n",
       "1                    0.116567  0.166667       0  \n",
       "2                    0.253629  0.183333       1  \n",
       "3                    0.038002  0.000000       0  \n",
       "4                    0.943638  0.200000       1  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "train = pd.read_csv(\"diabertes_FE_train_log.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['target']   \n",
    "X_train = train.drop([\"target\"], axis=1)\n",
    "\n",
    "#保存特征名字以备后用（可视化）\n",
    "feat_names = X_train.columns \n",
    "\n",
    "#sklearn的学习器大多之一稀疏数据输入，模型训练会快很多\n",
    "#查看一个学习器是否支持稀疏数据，可以看fit函数是否支持: X: {array-like, sparse matrix}.\n",
    "#可自行用timeit比较稠密数据和稀疏数据的训练时间\n",
    "from scipy.sparse import csr_matrix\n",
    "X_train = csr_matrix(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='warn',\n",
       "          n_jobs=None, penalty='l2', random_state=None, solver='warn',\n",
       "          tol=0.0001, verbose=0, warm_start=False),\n",
       "       fit_params=None, iid='warn', n_jobs=None,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "#需要调优的参数\n",
    "# 请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（slover）\n",
    "#tuned_parameters = {'penalty':['l1','l2'],\n",
    "#                   'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "#                   }\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=3, scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.47875532212275934\n",
      "{'C': 10, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    plt.errorbar(x_axis, -test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )\n",
    "plt.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分别使用L1,L2正则，参数取0.001,0.01,0.1,1，10,100,1000。共14种进行调优，最后结果L2正则、参数为10时取得最好分数。图中也可以看出，log（c）=1时已经达到较好的结果了，后面继续变化并没有对结果产生较明显的影响。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
